x86_emulate: Fix near CALL/JMP <reg,mem>. Broken by c/s 16491.
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 10 Jan 2008 22:53:43 +0000 (22:53 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 10 Jan 2008 22:53:43 +0000 (22:53 +0000)
Thanks to AMD for narrowing this one down.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/x86_emulate.c

index a31b5370eb667e54d0113f4ed6188f22808e4002..c1116017db6a549c06b9cf317814179175131158 100644 (file)
@@ -1732,7 +1732,6 @@ x86_emulate(
             break;
         case 2: /* call (near) */
         case 4: /* jmp (near) */
-            dst.type = OP_NONE;
             if ( (dst.bytes != 8) && mode_64bit() )
             {
                 dst.bytes = op_bytes = 8;
@@ -1746,6 +1745,7 @@ x86_emulate(
             _regs.eip = dst.val;
             if ( (modrm_reg & 7) == 2 )
                 goto push; /* call */
+            dst.type = OP_NONE;
             break;
         case 3: /* call (far, absolute indirect) */
         case 5: /* jmp (far, absolute indirect) */ {